home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / SERLCORL.TST / SETSCCTL.C < prev    next >
C/C++ Source or Header  |  1996-01-18  |  2KB  |  76 lines

  1. /* ============ */
  2. /* setscctl.c    */
  3. /* ============ */
  4. #include <srcrdefs.h>
  5. #include <miscdefs.h>
  6. #include <io.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. #define    ACT(X)    #X
  11.  
  12. #define    CLAMP(Out, Var, Lo, Hi)    Out = __min(Hi, __max(Lo, Var))
  13.  
  14. #define    NEED_ALL(Label)    "Enter "Label
  15.  
  16. #define    NEED_USER_ENTRY(LABEL, LO, HI) \
  17.     NEED_ALL(LABEL" ["ACT(LO)"-"ACT(HI)"]: ")
  18.  
  19. #define    COEFS_PER_CHI_SQ    \
  20.     "Number of Serial Correlations Per Chi-Square"
  21. #define    VARIATES_PER_CHI_SQ    \
  22.     "Corresponding Number of Variates to be Generated"
  23.  
  24. #define    REPORT_USER_INT_ENTRY(Entry, Label)            \
  25.     {                                \
  26.     fflush(NULL); printf("\n");                \
  27.     printf("    Number Entered: %.f", (double)Entry);    \
  28.     printf(" (%s)\n", Label);                \
  29.     }
  30. #define    SHOW_INT_VALUE_USED(Entered, Used)             \
  31.     printf("    Test Value Used: %.f%s\n", (double)Used,    \
  32.     ((double)Entered == (double)Used) ? "" : " (Clamped)")
  33.  
  34. /* ==================================================================== */
  35. /* SetSerialCorrelationControls - Puts Control Parameters in Structure    */
  36. /* ==================================================================== */
  37. void
  38. SetSerialCorrelationControls(SERCOR_DATA_STRU *SerCorData)
  39. {
  40.     int     NewlineCh;            /* Carriage Control Char.    */
  41.     UINT    UserUintEntry;
  42.     char    Prompt[128];
  43.  
  44.     NewlineCh = _isatty(_fileno(stdin)) ? '\r' : '\n';
  45.  
  46.     /* ------------------------------------------------------ */
  47.     /* Request Number of Coefficients Per Chi-Square Variable */
  48.     /* ------------------------------------------------------ */
  49.     GetUint(NEED_USER_ENTRY(COEFS_PER_CHI_SQ, MIN_CHI_SQ, MAX_CHI_SQ),
  50.     &UserUintEntry);
  51.  
  52.     REPORT_USER_INT_ENTRY(UserUintEntry, COEFS_PER_CHI_SQ);
  53.  
  54.     CLAMP(SerCorData->NumCoefs, UserUintEntry,
  55.     MIN_CHI_SQ, MAX_CHI_SQ);
  56.  
  57.     SHOW_INT_VALUE_USED(UserUintEntry, SerCorData->NumCoefs);
  58.  
  59.     /* --------------------------------------------------- */
  60.     /* Request Number of Variates to be Generated Per Pass */
  61.     /* --------------------------------------------------- */
  62.     fflush(NULL); fprintf(stderr, "%c", NewlineCh);
  63.  
  64.     sprintf(Prompt, "Enter %s [%u-%u]: ", VARIATES_PER_CHI_SQ,
  65.     SerCorData->NumCoefs + 3, MAX_VARIATES);
  66.  
  67.     GetUint(Prompt, &UserUintEntry);
  68.  
  69.     REPORT_USER_INT_ENTRY(UserUintEntry, VARIATES_PER_CHI_SQ);
  70.  
  71.     CLAMP(SerCorData->NumVarPerPass, UserUintEntry,
  72.     SerCorData->NumCoefs + 3, MAX_VARIATES);
  73.  
  74.     SHOW_INT_VALUE_USED(UserUintEntry, SerCorData->NumVarPerPass);
  75. }
  76.